package com.zl.design.adapter.service.impl;

import com.alibaba.fastjson.JSON;
import com.zl.design.adapter.model.RebateInfo;

import java.lang.reflect.InvocationTargetException;
import java.util.Map;

/**
 * 统一的MQ消息适配
 */
public class MQAdapter {
    /**
     *
     * @param strJson 消息的具体实体对象json格式
     * @param link mq消息的实体字段与兼容对象对应的map集合 key: 兼容实体字段   value: mq对应的实体字段
     * @return
     */
    public static RebateInfo filter(String strJson, Map<String ,String> link) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
        return filter(JSON.parseObject(strJson,Map.class),link);
    }

    public static RebateInfo filter(Map obj,Map<String ,String> link) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        //创建MQ实体兼容业务数据
        RebateInfo rebateInfo = new RebateInfo();
        //通过反射匹配对应的字段
        for (String key : link.keySet()) {
            Object val = obj.get(link.get(key));//获取mq对象实体字段值
            /**
             * getMethod(方法名,参数类型)
             * invoke(执行的对象,执行的数据)
             */
            RebateInfo.class.getMethod("set"+key.substring(0,1).toUpperCase()+key.substring(1),String.class).invoke(rebateInfo,val.toString());
        }
        return rebateInfo;

    }
}
